Elasticsearch ক্লাস্টার এবং শার্ড ম্যানেজমেন্ট হলো Elasticsearch এর সবচেয়ে গুরুত্বপূর্ণ এবং জটিল অংশগুলোর মধ্যে একটি। এটি Elasticsearch এর পারফরম্যান্স, স্কেলেবিলিটি, এবং ডেটা ডিসট্রিবিউশন পরিচালনা করার ক্ষেত্রে বড় ভূমিকা পালন করে। নিচে Elasticsearch ক্লাস্টার এবং শার্ড ম্যানেজমেন্ট নিয়ে বিস্তারিত আলোচনা করা হলো:
1. Elasticsearch Cluster এর বেসিক ধারণা
Elasticsearch ক্লাস্টার হলো একটি বা একাধিক নোডের সমষ্টি যা একসাথে ডেটা ইনডেক্সিং, সার্চ এবং ডেটা ম্যানেজমেন্ট কার্য পরিচালনা করে। একটি ক্লাস্টার একটি ইউনিক Cluster Name দ্বারা পরিচিত, যা এর সমস্ত নোডের মধ্যে একই থাকে। ক্লাস্টারের মূল কিছু বৈশিষ্ট্য:
- Node: একটি ক্লাস্টারে থাকা প্রতিটি ইন্ডিভিজুয়াল সার্ভার বা ইনস্ট্যান্সকে নোড বলা হয়। প্রতিটি নোডে Elasticsearch ইনস্টল থাকে এবং এটি ক্লাস্টারের অংশ হিসেবে কাজ করে।
- Master Node: এটি ক্লাস্টারের কনফিগারেশন, ইনডেক্স ম্যানেজমেন্ট, এবং ক্লাস্টার স্টেট মেইনটেইন করে। এটি শার্ড বরাদ্দ (allocation), নোড যোগ এবং ক্লাস্টারে কোনো পরিবর্তন সনাক্ত করে এবং পরিচালনা করে।
- Data Node: ডেটা নোডগুলো ডেটা সংরক্ষণ এবং সার্চ অপারেশন সম্পাদন করে। এগুলোতে শার্ড থাকে এবং ইনডেক্স ও সার্চ রিকোয়েস্ট হ্যান্ডেল করে।
- Ingest Node: ডেটা প্রসেসিং পাইপলাইনের জন্য ব্যবহৃত হয়। ইনডেক্স করার পূর্বে ডেটা ট্রান্সফর্ম বা মডিফাই করার জন্য এগুলো ব্যবহৃত হয়।
2. Shard এবং Replica এর ধারণা
Elasticsearch এ ইনডেক্স করা ডেটাকে ছোট ছোট অংশে ভাগ করা হয়, যা Shard নামে পরিচিত। প্রতিটি শার্ড একটি লজিক্যাল ডিভিশন এবং এটি একটি সম্পূর্ণ ইন্ডিপেন্ডেন্ট ইউনিট। শার্ড এবং রেপ্লিকা ম্যানেজমেন্টের মাধ্যমে Elasticsearch ডেটা ডিসট্রিবিউশন, ফল্ট টলারেন্স এবং পারফরম্যান্স বজায় রাখে।
শার্ড এর দুটি ধরণ:
- Primary Shard: ডেটা প্রথমে যে শার্ডে যায়, সেটি প্রাইমারি শার্ড। প্রতিটি ডকুমেন্ট একটি প্রাইমারি শার্ডে ইনডেক্স করা হয়।
- Replica Shard: প্রাইমারি শার্ডের কপি। এটি ফল্ট টলারেন্স (ডেটা রেডান্ডেন্সি) এবং লোড ব্যালেন্সিংয়ের জন্য ব্যবহৃত হয়।
শার্ড কনফিগারেশন ইনডেক্স তৈরির সময় নির্ধারণ করা হয়, এবং এটি পরে পরিবর্তন করা যায় না। একটি ইনডেক্স তৈরি করার সময়, আপনি প্রাইমারি শার্ড এবং রেপ্লিকার সংখ্যা সেট করতে পারেন।
উদাহরণ:
PUT /my-index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
এখানে, my-index ইনডেক্সটি ৩টি প্রাইমারি শার্ড এবং প্রতিটি প্রাইমারি শার্ডের ২টি করে রেপ্লিকা শার্ড নিয়ে গঠিত।
3. Shard Allocation এবং Balancing
Elasticsearch ক্লাস্টারের প্রতিটি নোডে শার্ডগুলো বরাদ্দ (allocation) করা হয়। শার্ড বরাদ্দ এবং ব্যালেন্সিং ক্লাস্টারের স্ট্যাবিলিটি এবং পারফরম্যান্স বজায় রাখার জন্য গুরুত্বপূর্ণ।
- Shard Allocation: Elasticsearch স্বয়ংক্রিয়ভাবে শার্ডগুলো নোডের মধ্যে বরাদ্দ করে। এটি ক্লাস্টারের ভারসাম্য বজায় রাখার চেষ্টা করে যাতে প্রতিটি নোডে সমান সংখ্যক শার্ড থাকে।
- Shard Reallocation: যখন ক্লাস্টারে নতুন নোড যোগ হয় বা কোনো নোড ব্যর্থ হয়, তখন Elasticsearch শার্ডগুলো পুনরায় বরাদ্দ করে ক্লাস্টারের ভারসাম্য বজায় রাখে।
- Shard Balancing: Elasticsearch এর shard balancer প্রতিটি নোডে শার্ড এবং রেপ্লিকার সংখ্যা ভারসাম্যপূর্ণ রাখে।
4. Shard Management কনফিগারেশন
Elasticsearch এর শার্ড ম্যানেজমেন্ট কনফিগারেশন কয়েকটি সেটিংসের মাধ্যমে নিয়ন্ত্রিত হয়:
- Cluster.routing.allocation.enable: শার্ড বরাদ্দ নিয়ন্ত্রণ করে। এটি
all,primaries,new_primaries, এবংnoneএর মতো মান নিতে পারে। - Cluster.routing.rebalance.enable: শার্ড ব্যালেন্সিং কন্ট্রোল করে এবং এটি
all,primaries,replicas, এবংnoneমান গ্রহণ করতে পারে। - Cluster.routing.allocation.awareness: শার্ড বরাদ্দের জন্য নোডের অবস্থান বা জোনাল বিবেচনাকে কন্ট্রোল করে, যা নোড ফেইলওভারের ক্ষেত্রে সহায়ক।
উদাহরণ:
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "all"
}
}
5. Cluster Health এবং Monitoring
Elasticsearch ক্লাস্টারের স্বাস্থ্যের অবস্থা বিভিন্ন স্ট্যাটাসে রিপোর্ট করে:
- Green: সবকিছু ঠিক আছে এবং সকল প্রাইমারি এবং রেপ্লিকা শার্ড অ্যাকটিভ।
- Yellow: সব প্রাইমারি শার্ড অ্যাকটিভ, কিন্তু কিছু রেপ্লিকা শার্ড মিসিং।
- Red: কিছু প্রাইমারি শার্ড মিসিং বা অ্যাকটিভ নয়।
ক্লাস্টারের স্বাস্থ্য চেক করার জন্য:
GET /_cluster/health
6. Shard Management Best Practices
- প্রাইমারি শার্ডের সংখ্যা ঠিকভাবে নির্ধারণ: ইনডেক্স তৈরির সময় প্রাইমারি শার্ডের সংখ্যা সাবধানে নির্ধারণ করতে হবে কারণ এটি পরে পরিবর্তন করা সম্ভব নয়। আপনি আপনার ডেটা ভলিউম এবং ভবিষ্যতে স্কেলিং বিবেচনা করে শার্ড সংখ্যা ঠিক করবেন।
- Replica Count ব্যবহার: ফল্ট টলারেন্স এবং সার্চ পারফরম্যান্স বাড়ানোর জন্য রেপ্লিকা সংখ্যা ব্যবহার করুন। তবে বেশি রেপ্লিকা সংখ্যা বাড়ালে স্টোরেজ এবং মেমরি লোড বাড়বে।
- Shard Size পর্যবেক্ষণ: শার্ডের আকার ৫০ জিবি বা তার বেশি হলে পারফরম্যান্স সমস্যা হতে পারে। শার্ডের আকার নিয়ন্ত্রণ করা উচিত যাতে সেগুলো অপ্টিমাল সাইজে থাকে।
- Shard Allocation Awareness: জোন বা নোড সচেতন বরাদ্দ ব্যবহারের মাধ্যমে শার্ডগুলিকে জোন বা ডাটা সেন্টার অনুযায়ী বরাদ্দ করা উচিত।
উপসংহার
Elasticsearch এ ক্লাস্টার এবং শার্ড ম্যানেজমেন্ট হলো পারফরম্যান্স, ফল্ট টলারেন্স, এবং ডেটা ডিসট্রিবিউশন নিশ্চিত করার জন্য গুরুত্বপূর্ণ। শার্ডের সঠিক কনফিগারেশন এবং শার্ড বরাদ্দ ও ব্যালেন্সিং ক্লাস্টারের পারফরম্যান্স বজায় রাখতে সহায়ক। Shard management এর মাধ্যমে আপনি ডেটার স্ট্যাবিলিটি এবং কনসিস্টেন্সি নিশ্চিত করতে পারেন, এবং ক্লাস্টার স্কেল করা সহজ হয়।
Elasticsearch-এ Cluster Management এবং Nodes খুব গুরুত্বপূর্ণ দুটি কনসেপ্ট, যা ক্লাস্টারের স্থিতিশীলতা, পারফরম্যান্স, এবং স্কেলিং বজায় রাখতে সাহায্য করে। Elasticsearch একটি ডিস্ট্রিবিউটেড সার্চ ইঞ্জিন, যেখানে একাধিক নোড একসঙ্গে কাজ করে একটি ক্লাস্টার তৈরি করে এবং ডেটা ইনডেক্সিং, সার্চ, এবং বিশ্লেষণ কার্য পরিচালনা করে। ক্লাস্টার এবং নোড ম্যানেজমেন্টের মাধ্যমে আপনি ক্লাস্টারের স্থিতিশীলতা, শার্ড ম্যানেজমেন্ট, এবং নোড স্কেলিং পরিচালনা করতে পারেন।
1. Elasticsearch Cluster এর ধারণা
Elasticsearch ক্লাস্টার হলো এক বা একাধিক নোডের সমষ্টি যা একসঙ্গে একটি ইউনিফাইড সার্চ এবং ডেটা প্রসেসিং ইঞ্জিন হিসেবে কাজ করে। প্রতিটি ক্লাস্টারের একটি ইউনিক Cluster Name থাকে, এবং ক্লাস্টারে থাকা প্রতিটি নোড একই ক্লাস্টার নেম শেয়ার করে।
Cluster এর মূল উপাদান:
- Node: একটি নোড হলো একটি ইন্ডিভিজুয়াল ইনস্ট্যান্স যা Elasticsearch এ রান করে। এক বা একাধিক নোড মিলে একটি ক্লাস্টার তৈরি করে। নোডে ডেটা সংরক্ষণ এবং সার্চ রিকোয়েস্ট হ্যান্ডেল করার জন্য শার্ড থাকে।
- Master Node: এটি ক্লাস্টারের জন্য গুরুত্বপূর্ণ কার্য সম্পাদন করে, যেমন শার্ড বরাদ্দ করা, ক্লাস্টারের স্টেট মেইনটেইন করা, এবং নতুন নোড যোগ বা রিমুভ করার মতো কাজ।
- Data Node: ডেটা সংরক্ষণ এবং সার্চ রিকোয়েস্ট হ্যান্ডেল করার জন্য ব্যবহৃত হয়। এগুলো শার্ড ধারণ করে এবং ইনডেক্স ও সার্চ অপারেশন পরিচালনা করে।
- Ingest Node: ডেটা প্রসেসিং পাইপলাইনের জন্য ব্যবহৃত হয়, যেমন ইনডেক্স করার পূর্বে ডেটা ট্রান্সফর্ম বা মডিফাই করা।
- Coordinating Node: এটি সার্চ রিকোয়েস্ট রিসিভ করে এবং বিভিন্ন ডেটা নোড থেকে রেজাল্ট সংগ্রহ করে একটি ইউনিফাইড রেসপন্স তৈরি করে। যখন কোনো নোডের কোনো নির্দিষ্ট ভূমিকা নেই (যেমন মাস্টার বা ডেটা নোড), তখন এটি coordinating node হিসেবে কাজ করতে পারে।
2. Node Types এবং তাদের ভূমিকা
Elasticsearch এ বিভিন্ন ধরণের নোড থাকে, প্রতিটির আলাদা ভূমিকা ও কাজ আছে:
Master Node:
- ক্লাস্টারের স্টেট এবং কনফিগারেশন ম্যানেজ করে।
- শার্ড বরাদ্দ এবং রিব্যালেন্সিং পরিচালনা করে।
- সাধারণত ক্লাস্টারে একাধিক মাস্টার-এলিজেবল নোড থাকে যাতে একটির ব্যর্থতার পরেও ক্লাস্টার কাজ চালিয়ে যেতে পারে।
- কনফিগারেশন:
node.master: true
Data Node:
- ডেটা সংরক্ষণ করে এবং সার্চ ও ইনডেক্সিং রিকোয়েস্ট হ্যান্ডেল করে।
- ক্লাস্টারের প্রধান লোড সাধারণত ডেটা নোডে আসে, তাই ডেটা নোডগুলোতে পর্যাপ্ত CPU, মেমরি, এবং ডিস্ক স্পেস থাকা উচিত।
- কনফিগারেশন:
node.data: true
Ingest Node:
- ডেটা ইনজেস্ট করার সময় প্রসেসিং (যেমন লোগ পার্স করা, ডেটা ফিল্টার করা) করার জন্য ব্যবহৃত হয়।
- এটি ডেটা প্রসেসিং অ্যাপ্লিকেশনগুলোতে লোড কমিয়ে ক্লাস্টারের পারফরম্যান্স বাড়ায়।
- কনফিগারেশন:
node.ingest: true
Coordinating Node:
- যখন কোনো নোডে মাস্টার বা ডেটা ভূমিকা থাকে না, তখন এটি coordinating node হিসেবে কাজ করে।
- এটি সার্চ এবং ইনডেক্সিং রিকোয়েস্ট হ্যান্ডেল করে এবং অন্যান্য নোডের সাথে কমিউনিকেশন করে একটি ইউনিফাইড রেসপন্স তৈরি করে।
- এটি ডিফল্ট হিসেবে সক্রিয় থাকে, যদি নোডে অন্য কোনো ভূমিকা না থাকে।
Voting-only Node:
- মাস্টার নোড নির্বাচনের সময় ভোট দিতে পারে, কিন্তু মাস্টার হিসেবে কাজ করে না।
- এটি ক্লাস্টারের স্থিতিশীলতা বাড়াতে এবং ক্লাস্টার নির্বাচনের সময় সহায়ক ভূমিকা পালন করতে পারে।
- কনফিগারেশন:
node.voting_only: true
3. Cluster Management এবং Monitoring
Elasticsearch ক্লাস্টার ম্যানেজ করার জন্য বিভিন্ন কমান্ড এবং API রয়েছে যা আপনাকে ক্লাস্টারের স্থিতিশীলতা এবং পারফরম্যান্স মনিটর করতে সাহায্য করে।
ক্লাস্টারের স্বাস্থ্য পরীক্ষা:
ক্লাস্টারের স্বাস্থ্যের অবস্থা জানার জন্য:
GET /_cluster/health
এটি ক্লাস্টারের তিনটি স্ট্যাটাস রিপোর্ট করে:
- Green: সব শার্ড (প্রাইমারি এবং রেপ্লিকা) অ্যাকটিভ।
- Yellow: সব প্রাইমারি শার্ড অ্যাকটিভ, কিন্তু কিছু রেপ্লিকা শার্ড মিসিং।
- Red: কিছু প্রাইমারি শার্ড মিসিং বা ইনঅ্যাকটিভ।
ক্লাস্টারে নোডের তথ্য জানার জন্য:
GET /_cat/nodes?v
এটি ক্লাস্টারের নোডগুলোর স্ট্যাটাস, রোল, এবং পারফরম্যান্স মেট্রিক্স প্রদর্শন করবে।
4. Shard Management এবং Cluster Scaling
Elasticsearch ক্লাস্টার ম্যানেজমেন্টে শার্ড ম্যানেজমেন্ট এবং ক্লাস্টার স্কেলিং গুরুত্বপূর্ণ ভূমিকা পালন করে।
- Shard Allocation: শার্ড বরাদ্দ স্বয়ংক্রিয়ভাবে Elasticsearch দ্বারা পরিচালিত হয়, তবে কিছু ক্ষেত্রে শার্ড ম্যানুয়ালি বরাদ্দ বা পুনর্বিন্যাস করা যায়:
POST /_cluster/reroute
- Cluster Scaling: Elasticsearch স্কেলিং সাপোর্ট করে, অর্থাৎ ক্লাস্টারে নতুন নোড যোগ করে বা ম্যানুয়ালি শার্ড মুভ করে স্কেল করা যায়।
- Horizontal Scaling: নতুন ডেটা নোড যোগ করে স্কেল করা।
- Vertical Scaling: নোডে মেমরি বা CPU আপগ্রেড করে স্কেল করা।
5. Cluster Settings Management
Elasticsearch ক্লাস্টারের কনফিগারেশন ডাইনামিকালি পরিবর্তন করা যায়, যেমন শার্ড বরাদ্দ বা ক্লাস্টারের ব্যালেন্সিং।
Shard Allocation Enable/Disable:
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
Rebalance Settings:
PUT /_cluster/settings
{
"transient": {
"cluster.routing.rebalance.enable": "all"
}
}
6. Cluster Best Practices
- মাস্টার নোডের সংখ্যা: মাস্টার নোডের সংখ্যা সর্বদা বিজোড় (odd) রাখুন (যেমন ৩, ৫) যাতে নির্বাচনের সময় ভোটিং প্রক্রিয়া সঠিকভাবে পরিচালিত হয়।
- নোড মনিটরিং: নোডগুলোর CPU, মেমরি, এবং ডিস্ক ব্যবহার নিয়মিত মনিটর করুন। Kibana এবং X-Pack ব্যবহার করে ড্যাশবোর্ড তৈরি করতে পারেন, যা ক্লাস্টার মেট্রিকস সহজে পর্যবেক্ষণ করতে সহায়ক।
- আর্কিটেকচার প্ল্যানিং: ডেটা লোড এবং সার্চ রিকোয়েস্ট অনুযায়ী নোডের সংখ্যা এবং শার্ড কনফিগারেশন সাবধানে পরিকল্পনা করুন।
উপসংহার
Elasticsearch এ Cluster Management এবং Nodes এর সঠিক ম্যানেজমেন্ট ডেটা ডিসট্রিবিউশন, শার্ড ম্যানেজমেন্ট এবং ক্লাস্টারের পারফরম্যান্স ও স্থিতিশীলতা নিশ্চিত করতে সাহায্য করে। ক্লাস্টারের স্বাস্থ্য এবং শার্ড বরাদ্দ নিয়মিত মনিটর করে আপনি Elasticsearch কে অপ্টিমাইজ করতে এবং স্কেলিং পরিচালনা করতে পারবেন।
Shard এবং Replica দুটি ধারণা ডেটাবেস বা ডিস্ট্রিবিউটেড সিস্টেমে ব্যবহৃত হয় ডেটা ম্যানেজমেন্ট, স্কেলিবিলিটি, এবং ফল্ট টলারেন্স উন্নত করতে। এই ধারণাগুলো সাধারণত ডিস্ট্রিবিউটেড ডাটাবেস সিস্টেম, যেমন MongoDB, Elasticsearch, Cassandra, বা অন্যান্য NoSQL ডাটাবেসে বেশি ব্যবহৃত হয়। চলুন প্রতিটি ধারণা বিস্তারিতভাবে ব্যাখ্যা করি:
Shard:
Shard হলো ডেটাবেসের একটি অংশ যা সম্পূর্ণ ডেটাবেসের একটি সাবসেট বা টুকরা ধারণ করে। শার্ডিং ব্যবস্থার মূল লক্ষ্য হলো একটি বড় ডেটাবেসকে ছোট ছোট অংশে ভাগ করে ডেটা স্টোরেজ এবং কুয়েরি পারফরম্যান্স উন্নত করা। এটি বিশেষভাবে কার্যকর যখন ডেটাবেসে অনেক ডেটা থাকে এবং তা একক সার্ভারে ধারণ করা সম্ভব নয় বা বাস্তবসম্মত নয়।
- কীভাবে কাজ করে: শার্ডিংয়ের মাধ্যমে ডেটা আলাদা আলাদা সার্ভারে (বা নোডে) বিভক্ত করে রাখা হয়। প্রতিটি শার্ড একটি নির্দিষ্ট ডেটা রেঞ্জ বা হ্যাশিং অ্যালগোরিদম ব্যবহার করে ডেটা সেগমেন্ট করে।
- উদাহরণ: ধরুন একটি ডেটাবেসে ব্যবহারকারীদের তথ্য আছে এবং তাদের ID অনুযায়ী শার্ড করা হয়েছে। তাহলে ID ১ থেকে ১০০০ পর্যন্ত ডেটা হয়ত শার্ড-১-এ থাকবে, এবং ১০০১ থেকে ২০০০ পর্যন্ত ডেটা শার্ড-২-এ থাকবে।
- লক্ষ্য: শার্ড ব্যবহারের মূল লক্ষ্য হলো স্কেলিবিলিটি এবং লোড ব্যালেন্সিং। একটি বড় ডেটাবেসকে ছোট শার্ডে ভাগ করে দিলে সার্ভারগুলোর মধ্যে লোড সমানভাবে বিতরণ হয় এবং পারফরম্যান্স ভালো হয়।
Replica:
Replica হলো শার্ডের একটি কপি বা রেপ্লিকা যা সিস্টেমের বিভিন্ন নোডে সংরক্ষিত হয়। এটি মূলত ডেটার রিডান্ড্যান্সি এবং ফল্ট টলারেন্স নিশ্চিত করতে ব্যবহৃত হয়।
- কীভাবে কাজ করে: প্রতিটি শার্ডের এক বা একাধিক রেপ্লিকা তৈরি করা হয় এবং সেগুলো বিভিন্ন নোডে সংরক্ষণ করা হয়। যখন কোনো নোড ব্যর্থ হয় বা অফলাইনে যায়, তখন অন্য নোডে থাকা রেপ্লিকা থেকে ডেটা পাওয়া যায়।
- উদাহরণ: যদি শার্ড-১-এর একটি প্রাইমারি কপি থাকে, তাহলে শার্ড-১-এর আরও একটি বা দুটি রেপ্লিকা তৈরি করা হতে পারে, যা অন্য সার্ভারগুলিতে সংরক্ষিত থাকে।
- লক্ষ্য: রেপ্লিকার মূল উদ্দেশ্য হলো ডেটার এভেইলেবিলিটি এবং রিডান্ড্যান্সি নিশ্চিত করা। এটি ডেটা লস রোধ করে এবং ফেইলওভার বা ব্যাকআপ সমাধান প্রদান করে।
Shard এবং Replica এর পার্থক্য:
| শার্ড (Shard) | রেপ্লিকা (Replica) |
|---|---|
| শার্ড হলো ডেটাবেসের একটি অংশ যা ডেটার একটি সাবসেট ধারণ করে। | রেপ্লিকা হলো শার্ডের একটি কপি, যা বিভিন্ন নোডে রাখা হয়। |
| এটি ডেটাবেসের স্কেলিবিলিটি এবং পারফরম্যান্স বাড়াতে ব্যবহৃত হয়। | এটি ডেটার এভেইলেবিলিটি এবং ফল্ট টলারেন্স উন্নত করতে ব্যবহৃত হয়। |
| প্রতিটি শার্ড আলাদা ডেটা ধারণ করে। | প্রতিটি রেপ্লিকা একটি নির্দিষ্ট শার্ডের কপি। |
Elasticsearch-এ Shard Allocation
Elasticsearch-এ শার্ড অ্যালোকেশন কনফিগার করার জন্য বেশ কিছু সেটিংস এবং প্যারামিটার আছে যা cluster এবং node level এ প্রভাব ফেলে। কিছু গুরুত্বপূর্ণ কনসেপ্ট ও কনফিগারেশন:
Cluster.routing.allocation.enable:
- এটি শার্ড অ্যালোকেশন নিয়ন্ত্রণ করার জন্য ব্যবহৃত হয়।
- ভ্যালু হতে পারে:
"all": সমস্ত প্রাইমারি এবং রেপ্লিকা শার্ড অ্যালোকেট করার অনুমতি দেয়।"primaries": শুধুমাত্র প্রাইমারি শার্ডগুলো অ্যালোকেট করা হয়।"new_primaries": নতুন প্রাইমারি শার্ড অ্যালোকেট করার অনুমতি দেয়।"none": কোনো শার্ডই অ্যালোকেট করা হবে না।
Awareness Allocation:
- শার্ডগুলো যাতে নির্দিষ্ট জোন বা rack-এ অবস্থিত থাকে তা নিশ্চিত করতে Elasticsearch-এ zone awareness এবং rack awareness কনফিগার করা যায়। এটি নিশ্চিত করে যে একটি জোন ডাউন হয়ে গেলেও অন্য জোনে শার্ডের কপি থাকে।
- উদাহরণ:
- এখানে, শার্ডগুলোকে বিভিন্ন
rack_id-তে বিতরণ করা হবে।
{
"cluster.routing.allocation.awareness.attributes": "rack_id"
}
Allocation Filtering:
- নির্দিষ্ট শার্ড বা ইন্ডেক্সগুলোকে নির্দিষ্ট নোডে অ্যালোকেট করতে এটি ব্যবহার করা হয়।
- উদাহরণ:
- এই সেটিংসটি নিশ্চিত করবে যে শার্ডগুলি শুধুমাত্র
node-1এ অ্যালোকেট হবে।
{
"cluster.routing.allocation.include._name": "node-1"
}
Elasticsearch-এ Shard Rebalancing
Elasticsearch-এ Shard Rebalancing স্বয়ংক্রিয়ভাবে কাজ করে, কিন্তু কিছু সেটিংস আছে যা কাস্টমাইজ করা যায়:
Cluster.routing.rebalance.enable:
- রিব্যালেন্সিং কন্ট্রোল করার জন্য ব্যবহৃত হয়।
- ভ্যালু হতে পারে:
"all": সমস্ত শার্ড রিব্যালেন্স করা হয়।"primaries": শুধু প্রাইমারি শার্ডগুলো রিব্যালেন্স করা হয়।"replicas": শুধু রেপ্লিকা শার্ড রিব্যালেন্স করা হয়।"none": কোনো শার্ড রিব্যালেন্স করা হবে না।
Rebalance Throttling:
- একবারে কতগুলো শার্ড রিব্যালেন্স হতে পারবে তা নির্ধারণ করতে
cluster.routing.allocation.cluster_concurrent_rebalanceপ্যারামিটারটি ব্যবহার করা যায়। - উদাহরণ:
- এটি নিশ্চিত করবে যে একবারে সর্বোচ্চ ২টি শার্ড রিব্যালেন্স হবে।
{
"cluster.routing.allocation.cluster_concurrent_rebalance": 2
}
Disk-based Shard Allocation:
- Elasticsearch নোডগুলোর ডিস্ট্রিবিউশন মনিটর করে, যাতে ডিস্ক স্পেস কমে গেলে স্বয়ংক্রিয়ভাবে শার্ডগুলো অন্য নোডে মুভ করাতে পারে।
- প্যারামিটারগুলো:
"cluster.routing.allocation.disk.threshold_enabled": true"cluster.routing.allocation.disk.watermark.low": "85%"(ডিফল্ট)"cluster.routing.allocation.disk.watermark.high": "90%"(ডিফল্ট)
Elasticsearch-এ Shard Allocation এবং Rebalancing মনিটর করা
- Cluster Health API:
GET /_cluster/healthদিয়ে ক্লাস্টারের হেলথ চেক করতে পারেন।
- Cluster Allocation Explanation API:
GET /_cluster/allocation/explainদিয়ে জানতে পারেন কেন কোনো শার্ড নির্দিষ্ট নোডে অ্যালোকেট হয়নি বা মুভ হয়নি।
Practical Tips:
- Shard Size: সাধারণত, একটি শার্ডের সাইজ ১০-৫০ গিগাবাইটের মধ্যে রাখার চেষ্টা করবেন, কারণ খুব বড় শার্ড ক্লাস্টারের পারফরম্যান্সে প্রভাব ফেলতে পারে।
- Shard Count Optimization: শার্ডের সংখ্যা অত্যধিক হলে পারফরম্যান্স সমস্যার সম্মুখীন হতে পারেন। সঠিক সাইজিং এবং কনফিগারেশন ক্লাস্টারের স্কেলেবিলিটি বাড়ায়।
- Monitoring and Alerts: শার্ড অ্যালোকেশন ও রিব্যালেন্সিং মনিটরিং-এর জন্য Kibana এবং Elasticsearch monitoring plugin ব্যবহার করতে পারেন।
এভাবে Elasticsearch-এ shard allocation এবং rebalancing কনফিগার করা এবং মনিটর করা যায়, যা পারফরম্যান্স এবং রিলায়েবিলিটি নিশ্চিত করতে সাহায্য করে।
Cluster Health Monitoring এবং Troubleshooting Elasticsearch-এ
Elasticsearch ক্লাস্টারের হেলথ মনিটরিং এবং ট্রাবলশুটিং হল সিস্টেমের স্থিতিশীলতা এবং পারফরম্যান্স বজায় রাখার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ কাজ। সঠিকভাবে মনিটরিং করলে দ্রুত সমস্যার সনাক্তকরণ এবং সমাধান সম্ভব হয়। এখানে Cluster Health Monitoring এবং Troubleshooting কিভাবে করতে হয় তার বিস্তারিত আলোচনা করা হলো।
1. Cluster Health Monitoring
Elasticsearch ক্লাস্টারের স্টেটাস তিনটি মেট্রিক্স দিয়ে নির্ধারণ করা হয়:
- Green: সমস্ত প্রাইমারি এবং রেপ্লিকা শার্ড অ্যালোকেট করা হয়েছে এবং সব কিছু ঠিক আছে।
- Yellow: সমস্ত প্রাইমারি শার্ড ঠিক আছে, কিন্তু কিছু রেপ্লিকা শার্ড মিসিং বা অ্যালোকেট করা যায়নি। সাধারণত এটি ইন্ডেক্সের ফ্লেক্সিবিলিটির ইঙ্গিত দেয়।
- Red: কিছু প্রাইমারি শার্ড অ্যালোকেট করা যায়নি। এটি একটি ক্রিটিক্যাল সমস্যা এবং ক্লাস্টারের ডেটা অ্যাক্সেস সমস্যা হতে পারে।
Monitoring Tools and APIs:
Cluster Health API:
- কমান্ড:
GET /_cluster/health - এই API ক্লাস্টারের হেলথ, নোড সংখ্যা, অ্যাক্টিভ শার্ড সংখ্যা, এবং অন্যান্য গুরুত্বপূর্ণ মেট্রিক্স প্রদান করে।
- উদাহরণ:
{
"cluster_name": "my-cluster",
"status": "yellow",
"number_of_nodes": 5,
"number_of_data_nodes": 3,
"active_primary_shards": 50,
"active_shards": 95,
"relocating_shards": 0,
"initializing_shards": 2,
"unassigned_shards": 3
}
Cluster Stats API:
- কমান্ড:
GET /_cluster/stats - এটি ক্লাস্টারের বিশদ বিবরণ প্রদান করে, যেমন নোডের তথ্য, ডিস্ক স্পেস ব্যবহার, শার্ড সংখ্যা ইত্যাদি।
Kibana Monitoring:
- Kibana-তে Elasticsearch Monitoring ড্যাশবোর্ড ব্যবহার করে ক্লাস্টারের গ্রাফিকাল ভিউ এবং মেট্রিক্স পর্যবেক্ষণ করা যায়। এটি CPU, মেমরি, ডিস্ক, শার্ড অ্যালোকেশন, এবং ক্লাস্টারের অন্যান্য ডিটেইলস দেখায়।
2. Troubleshooting Cluster Issues
Elasticsearch ক্লাস্টারে বিভিন্ন ধরনের সমস্যা হতে পারে। নিচে সাধারণ কিছু সমস্যা এবং সমাধানের উপায় নিয়ে আলোচনা করা হলো:
Problem 1: Cluster Status Yellow or Red
- Yellow Status:
- সাধারণত রেপ্লিকা শার্ডগুলো অ্যালোকেট করতে সমস্যা হলে এটি ঘটে।
- সমাধান:
- নিশ্চিত করুন যে যথেষ্ট সংখ্যক data nodes আছে রেপ্লিকা শার্ডগুলো অ্যালোকেট করার জন্য।
- নোডের লোগস চেক করুন (e.g.,
elasticsearch.log) কোনো এরর বা ওয়ার্নিং আছে কি না। - রেপ্লিকা সংখ্যা কমাতে পারেন যদি পর্যাপ্ত নোড না থাকে।
- Red Status:
- কোনো প্রাইমারি শার্ড মিসিং বা অ্যালোকেট করা যাচ্ছে না।
- সমাধান:
- Cluster Allocation Explanation API:
GET /_cluster/allocation/explainকমান্ড ব্যবহার করে শার্ড অ্যালোকেশন সমস্যার কারণ নির্ণয় করতে পারেন। - নোডে পর্যাপ্ত ডিস্ক স্পেস আছে কি না, তা নিশ্চিত করুন।
- Cluster.routing.allocation.disk.threshold_enabled নিশ্চিত করুন যে এটি true সেট করা আছে, এবং watermarks ঠিকভাবে কনফিগার করা আছে।
- কোন নোডে ডাটা বা নেটওয়ার্ক সমস্যা আছে কি না, তা চেক করুন।
- Cluster Allocation Explanation API:
Problem 2: Unassigned Shards
- Unassigned shards এর মানে, ক্লাস্টারে এমন শার্ড রয়েছে যেগুলো কোনো নোডে অ্যালোকেট করা হয়নি।
- সমাধান:
- Check Unassigned Shards:
GET /_cat/shardsকমান্ড ব্যবহার করে unassigned shards শনাক্ত করুন। - Allocation Explanation:
GET /_cluster/allocation/explainচালিয়ে কেন শার্ড অ্যালোকেট হয়নি তা বুঝে নিন। - ক্লাস্টারে ডিস্ক স্পেস বা নোডের লোড কনফিগারেশন ঠিকভাবে সেট আছে কি না, তা যাচাই করুন।
- Check Unassigned Shards:
Problem 3: Node Disconnects বা নোড ক্র্যাশ করে
- সাধারণত নোডের মেমরি, CPU লিমিটেশন বা নেটওয়ার্ক সমস্যা এই ধরনের সমস্যা সৃষ্টি করতে পারে।
- সমাধান:
- Node Logs: প্রাথমিকভাবে
elasticsearch.logবা নোডের লগ চেক করুন, যাতে কোনো specific error বা resource issue সনাক্ত করা যায়। - CPU/MEMORY Monitoring: নিশ্চিত করুন যে JVM এবং নোডের মেমরি কনফিগারেশন সঠিক আছে। Elasticsearch এর জন্য সাধারণত নোডের মোট RAM-এর ৫০% JVM heap size হিসেবে কনফিগার করা ভালো।
- Network Configuration: নেটওয়ার্ক latency চেক করুন এবং cluster settings-এ network.bind_host এবং network.publish_host ঠিক আছে কি না তা যাচাই করুন।
- Node Logs: প্রাথমিকভাবে
Problem 4: High Disk Usage
- Elasticsearch শার্ডগুলোতে প্রচুর ডিস্ক স্পেস ব্যবহার হতে পারে। ডিস্কের হাই ইউসেজ শার্ড অ্যালোকেশন বা ক্লাস্টারের পারফরম্যান্সে সমস্যা করতে পারে।
- সমাধান:
- Disk Threshold Configuration:
cluster.routing.allocation.disk.watermark.highএবংcluster.routing.allocation.disk.watermark.lowঠিকভাবে সেট আছে কি না তা নিশ্চিত করুন। - Delete Unused Indices: পুরনো বা অনাবশ্যক ইন্ডেক্স মুছে ফেলুন।
- Shrink or Rollover Indices: বড় ইন্ডেক্সগুলো shrink করে ছোট শার্ডে কনভার্ট করুন বা rollover API ব্যবহার করুন।
- Disk Threshold Configuration:
3. Proactive Monitoring Tips
Set Up Alerts:
- Kibana এবং Elasticsearch Monitoring ব্যবহার করে নির্দিষ্ট থ্রেশহোল্ড যেমন CPU, ডিস্ক ইউসেজ, শার্ড ইমব্যালেন্স, এবং cluster health status এর জন্য alert সেট করুন।
Regular Backups:
- ডেটা লস বা ইন্ডেক্স সমস্যা এড়ানোর জন্য Snapshot and Restore API ব্যবহার করে নিয়মিত স্ন্যাপশট নিন।
Check Cluster State API Regularly:
GET /_cluster/stateব্যবহার করে ক্লাস্টারের বর্তমান স্টেট এবং ইন্ডেক্সের শার্ডের ডিস্ট্রিবিউশন মনিটর করতে থাকুন।
4. Useful Elasticsearch APIs for Monitoring and Troubleshooting
Cat API: দ্রুত এবং সিম্পল ক্লাস্টার ইনফরমেশন পাওয়ার জন্য খুবই কার্যকর।
GET /_cat/health?v: ক্লাস্টারের হেলথ সম্পর্কে বিস্তারিত তথ্য।GET /_cat/nodes?v: নোডগুলোর স্ট্যাটাস এবং মেট্রিক্স।GET /_cat/indices?v: সমস্ত ইন্ডেক্সের মেট্রিক্স এবং শার্ড ইনফরমেশন।
Node Stats API:
GET /_nodes/stats: নোডের CPU, মেমরি, ডিস্ক এবং অন্যান্য স্ট্যাটাস সম্পর্কে বিশদ বিবরণ।
Elasticsearch-এর Cluster Health Monitoring এবং Troubleshooting সঠিকভাবে করতে পারলে সিস্টেমের স্থায়িত্ব এবং পারফরম্যান্স অনেকটাই নিশ্চিত করা সম্ভব। সঠিক কনফিগারেশন, মনিটরিং এবং ট্রাবলশুটিং কৌশল প্রয়োগ করে Elasticsearch ক্লাস্টারকে অপ্টিমাইজড ও স্কেলেবল অবস্থায় রাখা যায়।
Read more